#include<my_head.h>
# define USERNAME_LEN 6
#define THREAD_NUMS 1

//用户信息
typedef struct client_status {
    char user_id[6];
    char user_name[20];  //用户名
    int user_len;  //用户名长度
    char password[20000]; //密码
    int islogin;  //登录状态
    char  path[2000]; //当前路径
    char path_last[2000];//切割空格后的数据
                         //    char token[2000];  //每次自己用户信息发送成功之后 存储在user  
}client_status;
typedef struct c_sends {

    int isstatus;
    char user_id[1000];
    char user_name[1000];
    char password[1000];
    char token[2000];
}c_sends;
//命令信息
typedef struct {
    //  User user_inf;
    int mode;           // 1. cd   2. ls   3, puts   4, gets    5,rm     6, pwd
    int size;           //需要的信息个数
    int msg_len;        //传出去的信息长度
    char msg[2000];         //包含ls关键字之后信息和所需要信息的拼接 用&隔开
    char file_name[200];    //你们要什么就自行在自己的函数后面拼接
    char hash_values[2000];//puts 计算的hash 交给服务端
    char token[2000];                       //char token[2000];  //命令信息 从client_status拿到token 存储在sendMsg 作为下一次 发送消息 验证该用户是谁
}sendMsg;
typedef struct {
    //char token[2000];   //服务器生成的token 接收 接收之后存到sendMsg
    char statu[200];//是否成功找到 (类似状态码)
    char msg[20000];//返回的信息 依旧是&隔开 客户端自己切割
    char token[2000];
}recvMsg;

typedef struct {
    pthread_t pth_id;   //存储线程id的数组
    pthread_mutex_t lock;
    pthread_cond_t cond;
    bool exit_flag;//退出信号标志位，置1时表示已经退出
} thread_one;

typedef struct {
    sendMsg send_info;
    client_status consumer;
    int socket_long;
    bool is_gets;
    thread_one one;
}pthread_info;

bool connect_client(int *socket_fd);

//登录
bool login(int *net_fd, client_status* clients, c_sends sends,char *token);
//注销
bool unlogin(sendMsg msg,client_status *clents,int net_fd);

// ls实现逻辑：
// socket 传递 信息到服务端 （send)
//my_ls 等函数 中调用my_send ，函数中填充结构体的信息
//调用send 把结构体信息发到服务器端口
//
bool my_ls(sendMsg msg, client_status clients, int net_fd);

bool my_cd(sendMsg msg, client_status* clients, int net_fd);

bool my_rm(sendMsg msg, client_status clients, int net_fd);

bool my_pwd(sendMsg msg, client_status clients, int net_fd);

bool my_gets(sendMsg msg, client_status clients, int net_fd);

bool my_puts(sendMsg msg, client_status clients, int net_fd);

bool my_mkdir(sendMsg msg, client_status clients, int net_fd);
//z传输命令 的信息 fd(socket 文件描述符，)
//发送 对应函数需要给服务端的信息 
//
//bool my_send(){

//}
//共享资源



int getparameter(char* key, char* value);

int add_epoll(int fd_epoll, int fd);

 int initStatus(pthread_info **p_info);

void *thread_main(void *p);
